package com.smartcommunity.dao.sixEntity;

import com.smartcommunity.entity.village.OrgRelation;
import com.smartcommunity.entity.village.SixEntity;
import com.smartcommunity.entity.village.SixStatisticsEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @ClassName: SixEntityDao
 * @Description: 一标六实相关方法dao
 * @author: minsheng
 * @Date: 2019/1/14 19:39
 * @Company:
 * @version V1.5.0
 */
@Mapper
public interface SixEntityDao {
    /**
     * 批量入库对应小区一标六实数据
     * @param sixEntityList 小区一标六实数据列表
     */
    void addSixEntities(List<SixEntity> sixEntityList);

    /**
     * 入库单个小区一标六实数据，若存在则更新
     * @param sixEntity 小区一标六实数据
     */
    void addOrUpdateSixEntity(SixEntity sixEntity);

    /**
     * 根据父级id查询各个小区一标六实数据列表，并可以通过小区名删选
     * @param param 请求参数
     * @return 一标六实数据列表
     */
    List<Object> getSixEntityByParam(Map<String, Object> param);

    /**
     * 获取一标六实记录总数
     * @return 记录总数
     */
    Integer getSixEntityCount();

    /**
     * 根据小区编号删除一标六实
     * @param villageCode 小区编号（必填）
     */
    void deleteSixEntity(String villageCode);
    void deleteAllSixEntity();
    /**
     * 根据子级的parentId查找该子级的父级
     * @param pIds 父级id集合
     * @return 对应父级组织机构关系集合
     */
    List<OrgRelation> getParentOrgByParentId(@Param("pIds") String pIds);

    /**
     * 根据小区编码查找对应小区的父级组织机构id集合
     * @param villageCode 小区编码集合
     * @return 父级组织机构id集合
     */
    Set<Integer> getParentOrgIdByVillageCode(@Param("villageCode") String villageCode);

    /**
     * 获取一标六实统计总数
     * @param param
     * @return
     */
    SixEntity getSixEntitySumByVillageCode(Map<String, Object> param);

    /**
     * 实时获取一标六实统计总数
     * @param param
     * @return
     */
    SixEntity getNowSixEntitySumByVillageCode(Map<String, Object> param);

    /**
     * 根据小区编号(多选时逗号分隔)和小区名称查询关联的小区一标六实数据
     * @param map 参数，villageCode/villageName
     * @return 小区六实数据列表
     * @author TianZongBing
     * @date 2020/02/22
     */
    List<SixEntity> selectByVillageCodeName(Map<String, Object> map);


    List<SixEntity> selectNowByVillageCodeName(Map<String, Object> map);

    /**
     * 获取人员总数
     * @param villageCode
     * @return
     */
    int getPeopleTotalCount(@Param("villageCode") String villageCode);

    void insertSixEntityCount(List<SixStatisticsEntity> sixStatisticsEntity);
    void deleteSixEntityCount(@Param("type") String type);

    List<SixStatisticsEntity> getSixEntitySum(Map<String, Object> map);
    List<SixStatisticsEntity> getSixEntitySumGroupByVillageCode(Map<String, Object> map);
    List<SixStatisticsEntity> getCountByChildType(Map<String, Object> map);
}
